package org.zxl.springbootdemo.poi.word;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.xwpf.usermodel.*;

import java.io.*;

/**
 * @Description 导出word文档带表格的
 * @Author  z
 * 2018年12月1日  下午12:12:15
 */
public class ExportWord2 {
    private XWPFHelperTable xwpfHelperTable = null;
    private XWPFHelper xwpfHelper = null;
    public ExportWord2() {
        xwpfHelperTable = new XWPFHelperTable();
        xwpfHelper = new XWPFHelper();
    }
    /**
     * 创建好文档的基本 标题，表格  段落等部分
     * @return
     * @Author z 2018年12月16日
     */
    public XWPFDocument createXWPFDocument(String titleName,  String[] pictureUrls) throws IOException, InvalidFormatException {
        XWPFDocument doc = new XWPFDocument();
        createTitleParagraph(doc, titleName); //标题
        createContentParagraph(doc);
        if(pictureUrls!=null && pictureUrls.length>0){
            exportPicture(doc, pictureUrls);
        }
        return doc;
    }
    /**
     * 创建好文档的基本 标题，表格  段落等部分
     * @return
     * @Author z 2018年12月16日
     */
    public XWPFDocument createXWPFDocument(String titleName,  InputStream[] pictureFiles) throws IOException, InvalidFormatException {
        XWPFDocument doc = new XWPFDocument();
        createTitleParagraph(doc, titleName); //标题
        createContentParagraph(doc);
        if(pictureFiles!=null && pictureFiles.length>0){
            exportPicture(doc, pictureFiles);
        }
        return doc;
    }
    /**
     * 创建表格的标题样式
     * @param document
     * @Author z 2018年12月16日 下午5:28:38
     */
    private void createTitleParagraph(XWPFDocument document, String titleName) {
        XWPFParagraph titleParagraph = document.createParagraph();    //新建一个标题段落对象（就是一段文字）
        titleParagraph.setAlignment(ParagraphAlignment.CENTER);//样式居中
        XWPFRun titleFun = titleParagraph.createRun();    //创建文本对象
        titleFun.setText(titleName); //设置标题的名字
        titleFun.setBold(true); //加粗
        titleFun.setColor("000000");//设置颜色
        titleFun.setFontSize(25);    //字体大小
//        titleFun.setFontFamily("");//设置字体
        //...
        titleFun.addBreak();    //换行
    }

    private void createContentParagraph(XWPFDocument document){
        XWPFParagraph contentParagraph = document.createParagraph();    //新建一个标题段落对象（就是一段文字）
        XWPFRun contentFun = contentParagraph.createRun();    //创建文本对象
        StringBuilder sb = new StringBuilder("想要理解内循环，首先要了解以往的外循环是怎么运作的！这时一个很长的故事。加入世界贸易组织以后，" +
                "我国的经济步入了超高速的发展时期，用西方国家制定的国际规则逐渐融入到世界大经济体中，向世界输出商品，积累巨大的外汇储备规模，" +
                "并且促成了了人民币与美元的捆绑，进入了经济外循环的依赖模式，借此维护人民币汇率与维持必要商品的进口，依靠完整的工业化体系、" +
                "廉价的劳动力成本、较高质量的技能教育、一定的环保让步促成了世界工厂的地位，连续多年蝉联世界贸易出口的第一把交椅，出口商品积" +
                "累美元外汇储备，部分再以美元购买必要的商品和美国国债，两国经济之间产生了捆绑。但这种依赖美元霸权和经济外循环总是会出问题的，" +
                "尤其是主动权总是在规则的制定者身上，缺少核心科技的世界工厂容易被动形成各类科技禁运，尤其是在国际经济动荡之时很难依赖经济外循环" +
                "消耗掉巨大的世界产能，这就有了最近提及的经济内循环。");
        contentFun.setText(sb.toString());
        contentFun.addBreak();//换行
    }

    public void exportPicture(XWPFDocument document,String[] picturePaths) throws IOException, InvalidFormatException {
        XWPFParagraph prictureParagraph = document.createParagraph();
        prictureParagraph.setAlignment(ParagraphAlignment.CENTER);
        XWPFRun targetRun = prictureParagraph.createRun();
        targetRun.setText("Fig.1 A Natural Scene");
        targetRun.setBold(true);
        for(String picurl : picturePaths){
            String fileName = "dddd";    //图片的名称
            InputStream picInIsData = new FileInputStream(new File(picurl));
            int width = 5000000;
            int height = 5000000;
            targetRun.addPicture(picInIsData, XWPFDocument.PICTURE_TYPE_JPEG, fileName, width, height);
            picInIsData.close();
            targetRun.addBreak();//换行
        }
        System.out.println("图片插入完成");

    }

    public void exportPicture(XWPFDocument document,InputStream[] pictureFiles) throws IOException, InvalidFormatException {
        XWPFParagraph prictureParagraph = document.createParagraph();
        prictureParagraph.setAlignment(ParagraphAlignment.CENTER);
        XWPFRun targetRun = prictureParagraph.createRun();
        targetRun.setText("Fig.1 A Natural Scene");
        targetRun.setBold(true);
        for(InputStream picFile : pictureFiles){
            String fileName = "dddd";    //图片的名称
            int width = 5000000;
            int height = 5000000;
            targetRun.addPicture(picFile, XWPFDocument.PICTURE_TYPE_JPEG, fileName, width, height);
            picFile.close();
            targetRun.addBreak();//换行
        }
        System.out.println("图片插入完成");

    }

    /**
     * 往表格中填充数据
     * @param
     * @param document
     * @throws IOException
     * @Author z 2018年12月16日
     */
    @SuppressWarnings("unchecked")
    public void exportCheckWord(XWPFDocument document, String savePath) throws IOException {
        xwpfHelper.saveDocument(document, savePath);
    }


}